package com.example.message.service;

import com.example.message.entity.Message;
import com.example.message.vo.MessageVO;
import com.example.project.entity.Issue;

import java.util.List;
import java.util.Map;

/**
 * 通知服务接口
 */
public interface MessageService {

	/**
	 * 发送通知
	 */
	int sendMessage(Message message);

	/**
	 * 使用模板发送通知
	 */
	int sendMessageByTemplate(Message message);

	/**
	 * 发送通知给个人
	 */
	int sendToUser(Long userId, String title, String content, Integer noticeType);

	/**
	 * 发送通知给角色
	 */
	int sendToRole(Long roleId, String title, String content, Integer noticeType);

	/**
	 * 发送通知给部门
	 */
	int sendToDept(Long deptId, String title, String content, Integer noticeType);

	/**
	 * 发送通知给岗位
	 */
	int sendToPosition(Long positionId, String title, String content, Integer noticeType);

	/**
	 * 发送通知给全体
	 */
	int sendToAll(String title, String content, Integer noticeType);

	/**
	 * 根据模板发送通知
	 */
	int sendByTemplate(String templateCode, Map<String, Object> params, Integer targetType, String targetIds);

	/**
	 * 撤销通知
	 */
	boolean revokeMessage(Long noticeId);

	/**
	 * 获取通知列表
	 */
	List<Message> selectMessageList(Message message);

	/**
	 * 获取通知详情
	 */
	MessageVO selectMessageById(Long noticeId);

	/**
	 * 删除通知
	 */
	boolean deleteMessageByIds(Long[] noticeIds);

	/**
	 * 标记通知为已读
	 */
	boolean markAsRead(Long messageId, Long userId);

	/**
	 * 批量标记为已读
	 */
	boolean batchMarkAsRead(List<Long> receiveIds, Long userId);

	/**
	 * 处理通知
	 */
	boolean handleMessage(Long receiveId, Long userId, Integer handleStatus, String handleRemark);

	/**
	 * 查看通知详情
	 */
	MessageVO viewMessage(Long receiveId, Long userId);

	/**
	 * 获取用户通知列表
	 */
	List<Message> getUserMessageList(Long userId, Integer messageType, Integer readStatus);

	/**
	 * 获取用户未读通知数量
	 */
	Long getUnreadCount(Long userId);

	/**
	 * 获取新通知（用于右下角弹窗）
	 */
	List<MessageVO> getNewNotifications(Long userId, Long lastCheckTime);

	/**
	 * 更新通知信息
	 * 
	 * @param message 通知实体对象
	 * @return 更新是否成功
	 */
	boolean updateMessage(Message message);

	List<Message> findListByReceiverId(Long receiverId, Integer messageType, Integer readStatus, int size);

//	int sendMessage(Issue issue, String targetIds, String... targetNameArr);

	int sendIssueMessage(Issue issue);

}